package tools

import (
	"crypto/rand"
	"crypto/sha1"
	"encoding/base64"
	"fmt"
	"github.com/bwmarrin/snowflake"
	"io"
	"time"
)

const SessionPrefix = "sess_"

//var node *snowflake.Node
// 获取雪花算法的id
func GetSnowflakeId() string {
	// 默认节点ID eq 1，可以修改为其他serverId节点
	node, _ := snowflake.NewNode(1)
	// 自动生成 snowflake ID 返回string类型
	id := node.Generate().String()
	return id
}
// 该函数是定制化的雪花id算法，加入开始时间和机器id
//func Init(startTime string,machineID int64) (err error) {
//	var st time.Time
//	st,err =time.Parse("2006-01-02",startTime)
//	if err != nil {
//		return
//	}
//	snowflake.Epoch = st.UnixNano() / 1000000
//	node,err = snowflake.NewNode(machineID)
//	return
//}

//返回随机token
func GetRandomToken(length int) string {
	r := make([]byte, length)
	io.ReadFull(rand.Reader, r)
	return base64.URLEncoding.EncodeToString(r)
}

// 创建session id
func CreateSessionId(sessionId string) string {
	return SessionPrefix + sessionId
}

func GetSessionIdByUserId(userId int) string {
	return fmt.Sprintf("sess_map_%d", userId)
}

func GetSessionName(sessionId string) string {
	return SessionPrefix + sessionId
}

// 加密
func Sha1(s string) (str string) {
	h := sha1.New()
	h.Write([]byte(s))
	bs := h.Sum(nil)
	return fmt.Sprintf("%x", bs)
}

func GetNowDateTime() string {
	return time.Unix(time.Now().Unix(), 0).Format("2006-01-02 15:04:05")
}
